home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
PROGRAMM
/
CC_C
/
0574.ZIP
/
FRDWR.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-12-05
|
1KB
|
76 lines
include compiler.inc
ttl FRDWR, 1.06, 11-20-86, cr
;stream read
dseg
cseg
xtfs <write,read,$strhand>
procdef fread, <<bfadr, ptr>, <elsiz, word>, <elcount, word>, <strm, ptr>>
mov si,1 ;set READ flag
jmp short start
entrdef fwrite
xor si,si ;set WRITE flag
start:
pushreg
pushds
push si ;save flag
mov si, elcount ;nbr elements
mov ax, elsiz ;element size
cwd
mul si
mov di, ax ;save bytes to read or write
pop si ;restore flag
callit $strhand <<strm, ptr>>
inc ax
jz nodv2
dec ax
mov dl, 10h ;error code
or si,si
jnz rd
wr:
test bl, 2 ;open for writing?
jz seterr
callit write,<<di,reg>,<bfadr,ptr>,<ax,reg>>
jmp short back
rd:
test bl, 1 ;open for reading?
jz seterr
callit read,<<di,reg>,<bfadr,ptr>,<ax,reg>>
back:
mov dl, 08h
or ax, ax ;if zero, EOF
jz seterr
inc ax ; if -1, ERROR
or dl, 10h
or ax, ax
jz seterr
dec ax
;
mov si, elsiz ;element size
cmp si, 1
jbe nodv2
cwd
idiv si
jmp short nodv2
seterr:
ldptr si, strm
or byte ptr 2[si], dl ; set error or EOF code
mov ax, -1
nodv2:
pret ;return # of elements
pend fread
finish